

<!DOCTYPE html>
<html lang="zh-CN" data-default-color-scheme=auto>



<head>
  <meta charset="UTF-8">
  <link rel="apple-touch-icon" sizes="76x76" href="/img/favicon.png">
  <link rel="icon" href="/img/favicon.png">
  <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=5.0, shrink-to-fit=no">
  <meta http-equiv="x-ua-compatible" content="ie=edge">
  
  <meta name="theme-color" content="#2f4154">
  <meta name="author" content="John Doe">
  <meta name="keywords" content="">
  
    <meta name="description" content="Redis简介Redis 是一个开源（BSD许可）的，内存中的数据结构存储系统，它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构，如 字符串（strings）， 散列（hashes）， 列表（lists）， 集合（sets）， 有序集合（sorted sets） 与范围查询， bitmaps， hyperloglogs 和 地理空间（geospatial） 索引半径查询。 Redis">
<meta property="og:type" content="article">
<meta property="og:title" content="Redis入门">
<meta property="og:url" content="http://example.com/2020/04/16/redis/Redis%E5%85%A5%E9%97%A8/index.html">
<meta property="og:site_name" content="Hexo">
<meta property="og:description" content="Redis简介Redis 是一个开源（BSD许可）的，内存中的数据结构存储系统，它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构，如 字符串（strings）， 散列（hashes）， 列表（lists）， 集合（sets）， 有序集合（sorted sets） 与范围查询， bitmaps， hyperloglogs 和 地理空间（geospatial） 索引半径查询。 Redis">
<meta property="og:locale" content="zh_CN">
<meta property="og:image" content="https://www.runoob.com/wp-content/uploads/2014/11/14022020088882.jpg">
<meta property="article:published_time" content="2020-04-16T01:34:42.000Z">
<meta property="article:modified_time" content="2020-05-25T18:39:22.000Z">
<meta property="article:author" content="John Doe">
<meta property="article:tag" content="Redis">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:image" content="https://www.runoob.com/wp-content/uploads/2014/11/14022020088882.jpg">
  
  
  <title>Redis入门 - Hexo</title>

  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/css/bootstrap.min.css" />


  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/github-markdown-css@4/github-markdown.min.css" />
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/hint.css@2/hint.min.css" />

  
    
    
      
      <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@10/styles/github-gist.min.css" />
    
  

  
    <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.css" />
  


<!-- 主题依赖的图标库，不要自行修改 -->

<link rel="stylesheet" href="//at.alicdn.com/t/font_1749284_ba1fz6golrf.css">



<link rel="stylesheet" href="//at.alicdn.com/t/font_1736178_lbnruvf0jn.css">


<link  rel="stylesheet" href="/css/main.css" />

<!-- 自定义样式保持在最底部 -->


  <script id="fluid-configs">
    var Fluid = window.Fluid || {};
    var CONFIG = {"hostname":"example.com","root":"/","version":"1.8.13","typing":{"enable":true,"typeSpeed":70,"cursorChar":"_","loop":false},"anchorjs":{"enable":true,"element":"h1,h2,h3,h4,h5,h6","placement":"right","visible":"hover","icon":""},"progressbar":{"enable":true,"height_px":3,"color":"#29d","options":{"showSpinner":false,"trickleSpeed":100}},"copy_btn":true,"image_zoom":{"enable":true,"img_url_replace":["",""]},"toc":{"enable":true,"headingSelector":"h1,h2,h3,h4,h5,h6","collapseDepth":0},"lazyload":{"enable":true,"loading_img":"/img/loading.gif","onlypost":false,"offset_factor":2},"web_analytics":{"enable":false,"baidu":null,"google":null,"gtag":null,"tencent":{"sid":null,"cid":null},"woyaola":null,"cnzz":null,"leancloud":{"app_id":null,"app_key":null,"server_url":null,"path":"window.location.pathname","ignore_local":false}},"search_path":"/local-search.xml"};
  </script>
  <script  src="/js/utils.js" ></script>
  <script  src="/js/color-schema.js" ></script>
<meta name="generator" content="Hexo 6.0.0"></head>


<body>
  <header style="height: 70vh;">
    <nav id="navbar" class="navbar fixed-top  navbar-expand-lg navbar-dark scrolling-navbar">
  <div class="container">
    <a class="navbar-brand" href="/">
      <strong>LZDF</strong>
    </a>

    <button id="navbar-toggler-btn" class="navbar-toggler" type="button" data-toggle="collapse"
            data-target="#navbarSupportedContent"
            aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
      <div class="animated-icon"><span></span><span></span><span></span></div>
    </button>

    <!-- Collapsible content -->
    <div class="collapse navbar-collapse" id="navbarSupportedContent">
      <ul class="navbar-nav ml-auto text-center">
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/">
                <i class="iconfont icon-home-fill"></i>
                首页
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/archives/">
                <i class="iconfont icon-archive-fill"></i>
                归档
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/categories/">
                <i class="iconfont icon-category-fill"></i>
                分类
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/tags/">
                <i class="iconfont icon-tags-fill"></i>
                标签
              </a>
            </li>
          
        
          
          
          
          
            <li class="nav-item">
              <a class="nav-link" href="/about/">
                <i class="iconfont icon-user-fill"></i>
                关于
              </a>
            </li>
          
        
        
          <li class="nav-item" id="search-btn">
            <a class="nav-link" target="_self" href="javascript:;" data-toggle="modal" data-target="#modalSearch" aria-label="Search">
              &nbsp;<i class="iconfont icon-search"></i>&nbsp;
            </a>
          </li>
        
        
          <li class="nav-item" id="color-toggle-btn">
            <a class="nav-link" target="_self" href="javascript:;" aria-label="Color Toggle">&nbsp;<i
                class="iconfont icon-dark" id="color-toggle-icon"></i>&nbsp;</a>
          </li>
        
      </ul>
    </div>
  </div>
</nav>

    <div class="banner" id="banner" parallax=true
         style="background: url('/img/default.png') no-repeat center center;
           background-size: cover;">
      <div class="full-bg-img">
        <div class="mask flex-center" style="background-color: rgba(0, 0, 0, 0.3)">
          <div class="page-header text-center fade-in-up">
            <span class="h2" id="subtitle" title="Redis入门">
              
            </span>

            
              <div class="mt-3">
  
  
    <span class="post-meta">
      <i class="iconfont icon-date-fill" aria-hidden="true"></i>
      <time datetime="2020-04-16 09:34" pubdate>
        2020年4月16日 上午
      </time>
    </span>
  
</div>

<div class="mt-1">
  
    <span class="post-meta mr-2">
      <i class="iconfont icon-chart"></i>
      10k 字
    </span>
  

  
    <span class="post-meta mr-2">
      <i class="iconfont icon-clock-fill"></i>
      
      
      87 分钟
    </span>
  

  
  
</div>

            
          </div>

          
        </div>
      </div>
    </div>
  </header>

  <main>
    
      

<div class="container-fluid nopadding-x">
  <div class="row nomargin-x">
    <div class="d-none d-lg-block col-lg-2"></div>
    <div class="col-lg-8 nopadding-x-md">
      <div class="container nopadding-x-md" id="board-ctn">
        <div class="py-5" id="board">
          <article class="post-content mx-auto">
            <!-- SEO header -->
            <h1 style="display: none">Redis入门</h1>
            
            <div class="markdown-body">
              <h1 id="Redis简介"><a href="#Redis简介" class="headerlink" title="Redis简介"></a>Redis简介</h1><p><code>Redis</code> 是一个开源（BSD许可）的，内存中的数据结构存储系统，它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构，如 <strong>字符串（strings）</strong>， <strong>散列（hashes）</strong>， <strong>列表（lists）</strong>， <strong>集合（sets）</strong>， <strong>有序集合（sorted sets）</strong> 与范围查询， <strong>bitmaps</strong>， <strong>hyperloglogs</strong> 和 地理空间（geospatial） 索引半径查询。 Redis 内置了 <strong>复制（replication）</strong>，<strong>LUA脚本（Lua scripting）</strong>， <strong>LRU驱动事件（LRU eviction）</strong>，<strong>事务（transactions）</strong> 和不同级别的 <strong>磁盘持久化（persistence）</strong>， 并通过 <strong>Redis哨兵（Sentinel）</strong>*和<strong>自动 分区</strong>（Cluster）提供高可用性（high availability）。</p>
<p><code>Redis</code> 与其他 key - value 缓存产品有以下三个特点：</p>
<ul>
<li>Redis支持数据的持久化，可以将内存中的数据保存在磁盘中，重启的时候可以再次加载进行使用。</li>
<li>Redis不仅仅支持简单的key-value类型的数据，同时还提供list，set，zset，hash等数据结构的存储。</li>
<li>Redis支持数据的备份，即master-slave模式的数据备份。</li>
</ul>
<h1 id="Redis-数据类型"><a href="#Redis-数据类型" class="headerlink" title="Redis 数据类型"></a>Redis 数据类型</h1><p><code>Redis</code> 支持五种数据类型：<strong>string（字符串）</strong>，<strong>hash（哈希）</strong>，<strong>list（列表）</strong>，<strong>set（集合）</strong>及zset(sorted set：<strong>有序集合</strong>)。</p>
<h2 id="String（字符串）"><a href="#String（字符串）" class="headerlink" title="String（字符串）"></a>String（字符串）</h2><p>string 是 <code>Redis</code> 最基本的类型，你可以理解成与 <code>Memcached</code> 一模一样的类型，一个 key 对应一个 value。</p>
<p>string 类型是二进制安全的。意思是 <code>Redis</code> 的 string 可以包含任何数据。比如jpg图片或者序列化的对象。</p>
<p>string 类型是 <code>Redis</code> 最基本的数据类型，string 类型的值最大能存储 <strong>512MB</strong>。</p>
<h3 id="实例"><a href="#实例" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; <span class="hljs-built_in">set</span> ruoob <span class="hljs-string">&quot;Hello&quot;</span><br>OK<br>127.0.0.1:6379&gt; get ruoob<br><span class="hljs-string">&quot;Hello&quot;</span><br></code></pre></td></tr></table></figure>
<p><strong>注意</strong>：一个键最大能存储 512MB。</p>
<h2 id="Hash（哈希）"><a href="#Hash（哈希）" class="headerlink" title="Hash（哈希）"></a>Hash（哈希）</h2><p><code>Redis</code> hash 是一个键值(key=&gt;value)对集合。</p>
<p><code>Redis</code> hash 是一个 string 类型的 field 和 value 的映射表，hash 特别适合用于存储对象。</p>
<h3 id="实例-1"><a href="#实例-1" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; hmset runoob field1 <span class="hljs-string">&quot;hello&quot;</span> field2 <span class="hljs-string">&quot;world&quot;</span><br>OK<br>127.0.0.1:6379&gt; HGET runoob field1<br><span class="hljs-string">&quot;Hello&quot;</span><br>127.0.0.1:6379&gt; HGET runoob field2<br><span class="hljs-string">&quot;World&quot;</span><br></code></pre></td></tr></table></figure>
<p>实例中我们使用了 <code>Redis</code> <code>HMSET</code>, <code>HGET</code> 命令，<code>HMSET</code> 设置了两个 <strong>field=&gt;value</strong> 对, <code>HGET</code> 获取对应 <strong>field</strong> 对应的 <strong>value</strong>。</p>
<p>每个 hash 可以存储 <code>2^32 - 1</code> 键值对（40多亿）。</p>
<h2 id="List（列表）"><a href="#List（列表）" class="headerlink" title="List（列表）"></a>List（列表）</h2><p><code>Redis</code> 列表是简单的字符串列表，按照插入顺序排序。你可以添加一个元素到列表的头部（左边）或者尾部（右边）。</p>
<h3 id="实例-2"><a href="#实例-2" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; del runoob                <span class="hljs-comment"># del key 删除一个 key</span><br>127.0.0.1:6379&gt; lpush runoob redis        <span class="hljs-comment"># lpush 往列表中插入一个值</span><br>(<span class="hljs-built_in">integer</span>) 1<br>127.0.0.1:6379&gt; lpush runoob mongodb<br>(<span class="hljs-built_in">integer</span>) 2<br>127.0.0.1:6379&gt; lpush runoob rabitmq<br>(<span class="hljs-built_in">integer</span>) 3<br>127.0.0.1:6379&gt; lpush runoob git<br>(<span class="hljs-built_in">integer</span>) 4<br>127.0.0.1:6379&gt; lpush runoob svn<br>(<span class="hljs-built_in">integer</span>) 5<br>127.0.0.1:6379&gt; lrange runoob 0 10        <span class="hljs-comment"># lrange 获取列表 0-10 范围内的元素</span><br>1) <span class="hljs-string">&quot;svn&quot;</span><br>2) <span class="hljs-string">&quot;git&quot;</span><br>3) <span class="hljs-string">&quot;rabitmq&quot;</span><br>4) <span class="hljs-string">&quot;mongodb&quot;</span><br>5) <span class="hljs-string">&quot;redis&quot;</span><br>127.0.0.1:6379&gt;<br></code></pre></td></tr></table></figure>
<p>列表最多可存储 <code>2^32 - 1</code> 元素 (4294967295, 每个列表可存储40多亿)。</p>
<h2 id="Set（集合）"><a href="#Set（集合）" class="headerlink" title="Set（集合）"></a>Set（集合）</h2><p><code>Redis</code> 的 Set 是 string 类型的<strong>无序集合</strong>。</p>
<p>集合是通过哈希表实现的，所以添加，删除，查找的复杂度都是 O(1)。</p>
<h3 id="sadd-命令"><a href="#sadd-命令" class="headerlink" title="sadd 命令"></a>sadd 命令</h3><p>添加一个 string 元素到 key 对应的 set 集合中，成功返回 1，如果元素已经在集合中返回 0。</p>
<h3 id="smembers-命令"><a href="#smembers-命令" class="headerlink" title="smembers 命令"></a>smembers 命令</h3><p>读取一个 key 对应的 set 集合。</p>
<h3 id="实例-3"><a href="#实例-3" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; del runoob<br>127.0.0.1:6379&gt; sadd runoob redis<br>(<span class="hljs-built_in">integer</span>) 1<br>127.0.0.1:6379&gt; sadd runoob mongodb<br>(<span class="hljs-built_in">integer</span>) 1<br>127.0.0.1:6379&gt; sadd runoob rabitmq<br>(<span class="hljs-built_in">integer</span>) 1<br>127.0.0.1:6379&gt; sadd runoob rabitmq<br>(<span class="hljs-built_in">integer</span>) 0<br>127.0.0.1:6379&gt; smembers runoob<br>1) <span class="hljs-string">&quot;redis&quot;</span><br>2) <span class="hljs-string">&quot;rabitmq&quot;</span><br>3) <span class="hljs-string">&quot;mongodb&quot;</span><br></code></pre></td></tr></table></figure>
<p>注意：以上实例中 <code>rabitmq</code> 添加了两次，但根据集合内元素的唯一性，第二次插入的元素将被忽略。</p>
<p>集合中最大的成员数为 <code>2^32 - 1</code>(4294967295, 每个集合可存储40多亿个成员)。</p>
<h2 id="zset-sorted-set：有序集合"><a href="#zset-sorted-set：有序集合" class="headerlink" title="zset(sorted set：有序集合)"></a>zset(sorted set：有序集合)</h2><p><code>Redis</code> zset 和 set 一样也是string类型元素的集合,且<strong>不允许重复的成员</strong>。<br>不同的是每个元素都会关联一个double类型的分数。redis正是通过分数来为集合中的成员进行从小到大的排序。</p>
<p>zset的成员是唯一的,但分数(score)却可以重复。</p>
<h3 id="zadd-命令"><a href="#zadd-命令" class="headerlink" title="zadd 命令"></a>zadd 命令</h3><p>添加元素到集合，元素在集合中存在则更新对应score</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">zadd key score member <br></code></pre></td></tr></table></figure>

<h3 id="实例-4"><a href="#实例-4" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; del runoob<br>127.0.0.1:6379&gt; zadd runoob 0 redis<br>(<span class="hljs-built_in">integer</span>) 1<br>127.0.0.1:6379&gt; zadd runoob 0 mongodb<br>(<span class="hljs-built_in">integer</span>) 1<br>127.0.0.1:6379&gt; zadd runoob 0 rabitmq<br>(<span class="hljs-built_in">integer</span>) 1<br>127.0.0.1:6379&gt; zadd runoob 0 rabitmq<br>(<span class="hljs-built_in">integer</span>) 0<br>127.0.0.1:6379&gt; &gt; ZRANGEBYSCORE runoob 0 1000<br>1) <span class="hljs-string">&quot;mongodb&quot;</span><br>2) <span class="hljs-string">&quot;rabitmq&quot;</span><br>3) <span class="hljs-string">&quot;redis&quot;</span><br></code></pre></td></tr></table></figure>

<h1 id="Redis-命令"><a href="#Redis-命令" class="headerlink" title="Redis 命令"></a>Redis 命令</h1><h2 id="Redis-登陆命令"><a href="#Redis-登陆命令" class="headerlink" title="Redis 登陆命令"></a>Redis 登陆命令</h2><h3 id="语法"><a href="#语法" class="headerlink" title="语法"></a>语法</h3><p>Redis 客户端的基本语法为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ redis-cli<br></code></pre></td></tr></table></figure>

<h3 id="实例-5"><a href="#实例-5" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ redis-cli<br>127.0.0.1:6379&gt;<br>127.0.0.1:6379&gt; PING<br>PONG<br></code></pre></td></tr></table></figure>
<p>在以上实例中我们连接到本地的 redis 服务并执行 <strong>PING</strong> 命令，该命令用于检测 redis 服务是否启动。</p>
<h2 id="在远程服务上执行命令"><a href="#在远程服务上执行命令" class="headerlink" title="在远程服务上执行命令"></a>在远程服务上执行命令</h2><h3 id="语法-1"><a href="#语法-1" class="headerlink" title="语法"></a>语法</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ redis-cli -h host -p port -a password<br></code></pre></td></tr></table></figure>

<h3 id="实例-6"><a href="#实例-6" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash"><span class="hljs-variable">$redis</span>-cli -h 127.0.0.1 -p 6379 -a <span class="hljs-string">&quot;password&quot;</span><br>Warning: Using a password with <span class="hljs-string">&#x27;-a&#x27;</span> or <span class="hljs-string">&#x27;-u&#x27;</span> option on the <span class="hljs-built_in">command</span> line interface may not be safe.<br>127.0.0.1:6379&gt;<br>127.0.0.1:6379&gt; PING<br>PONG<br></code></pre></td></tr></table></figure>

<h2 id="Redis-键-key"><a href="#Redis-键-key" class="headerlink" title="Redis 键(key)"></a>Redis 键(key)</h2><p><code>Redis</code> 键命令用于管理 redis 的键。</p>
<h3 id="语法-2"><a href="#语法-2" class="headerlink" title="语法"></a>语法</h3><p><code>Redis</code> 键命令的基本语法如下：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; COMMAND KEY_NAME<br></code></pre></td></tr></table></figure>
<h3 id="实例-7"><a href="#实例-7" class="headerlink" title="实例"></a>实例</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; SET runoobkey redis<br>OK<br>127.0.0.1:6379&gt; DEL runoobkey<br>(<span class="hljs-built_in">integer</span>) 1<br></code></pre></td></tr></table></figure>
<p>在以上实例中 <code>DEL</code> 是一个命令， <code>runoobkey</code> 是一个键。 如果键被删除成功，命令执行后输出 <strong>(integer) 1</strong>，否则将输出 <strong>(integer) 0</strong></p>
<h2 id="Redis-keys-命令参考"><a href="#Redis-keys-命令参考" class="headerlink" title="Redis keys 命令参考"></a>Redis keys 命令参考</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/key/index.html">Redis 命令参考——Key（键）</a></p>
<h2 id="Redis-字符串-String"><a href="#Redis-字符串-String" class="headerlink" title="Redis 字符串(String)"></a>Redis 字符串(String)</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/string/index.html">Redis 命令参考——字符串(String)</a></p>
<h2 id="Redis-哈希-Hash"><a href="#Redis-哈希-Hash" class="headerlink" title="Redis 哈希(Hash)"></a>Redis 哈希(Hash)</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/hash/index.html">Redis 命令参考——哈希(Hash)</a></p>
<h2 id="Redis-列表-List"><a href="#Redis-列表-List" class="headerlink" title="Redis 列表(List)"></a>Redis 列表(List)</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/list/index.html">Redis 命令参考——列表(List)</a></p>
<h2 id="Redis-集合-Set"><a href="#Redis-集合-Set" class="headerlink" title="Redis 集合(Set)"></a>Redis 集合(Set)</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/set/index.html">Redis 命令参考——集合(Set)</a></p>
<h2 id="Redis-有序集合-sorted-set"><a href="#Redis-有序集合-sorted-set" class="headerlink" title="Redis 有序集合(sorted set)"></a>Redis 有序集合(sorted set)</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/sorted_set/index.html">Redis 命令参考——有序集合(sorted set)</a></p>
<h2 id="Redis-发布订阅"><a href="#Redis-发布订阅" class="headerlink" title="Redis 发布订阅"></a>Redis 发布订阅</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/pub_sub/index.html">Redis 命令参考——Pub/Sub（发布/订阅）</a></p>
<h2 id="Redis-事务"><a href="#Redis-事务" class="headerlink" title="Redis 事务"></a>Redis 事务</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/transaction/index.html">Redis 命令参考——Transaction（事务）</a></p>
<h2 id="Redis-脚本"><a href="#Redis-脚本" class="headerlink" title="Redis 脚本"></a>Redis 脚本</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/script/index.html">Redis 命令参考——Script（脚本）</a></p>
<h2 id="Redis-连接"><a href="#Redis-连接" class="headerlink" title="Redis 连接"></a>Redis 连接</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/connection/index.html">Redis 命令参考——Connection（连接）</a></p>
<h2 id="Redis-服务器"><a href="#Redis-服务器" class="headerlink" title="Redis 服务器"></a>Redis 服务器</h2><p><a target="_blank" rel="noopener" href="http://doc.redisfans.com/server/index.html">Redis 命令参考——Server（服务器）</a></p>
<h1 id="Redis-高级教程"><a href="#Redis-高级教程" class="headerlink" title="Redis 高级教程"></a>Redis 高级教程</h1><h2 id="Redis-数据备份与恢复"><a href="#Redis-数据备份与恢复" class="headerlink" title="Redis 数据备份与恢复"></a>Redis 数据备份与恢复</h2><h3 id="备份数据"><a href="#备份数据" class="headerlink" title="备份数据"></a>备份数据</h3><p>Redis <code>SAVE</code> 命令用于创建当前数据库的备份。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; SAVE <br>OK<br></code></pre></td></tr></table></figure>
<p>该命令将在 redis 安装目录中创建 <strong>dump.rdb</strong> 文件。</p>
<h3 id="恢复数据"><a href="#恢复数据" class="headerlink" title="恢复数据"></a>恢复数据</h3><p>如果需要恢复数据，只需将备份文件 (<strong>dump.rdb</strong>) 移动到 redis 安装目录并启动服务即可。获取 redis 目录可以使用 CONFIG 命令，如下所示：</p>
<p>redis 127.0.0.1:6379&gt; CONFIG GET dir</p>
<ol>
<li>“dir”</li>
<li>“/usr/local/redis/bin”<br>以上命令 CONFIG GET dir 输出的 redis 安装目录为 /usr/local/redis/bin。</li>
</ol>
<h3 id="Bgsave"><a href="#Bgsave" class="headerlink" title="Bgsave"></a>Bgsave</h3><p>创建 redis 备份文件也可以使用命令 <strong>BGSAVE</strong>，该命令在后台执行。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; BGSAVE<br>Background saving started   <br></code></pre></td></tr></table></figure>

<h2 id="Redis-安全"><a href="#Redis-安全" class="headerlink" title="Redis 安全"></a>Redis 安全</h2><p>我们可以通过 redis 的配置文件设置密码参数，这样客户端连接到 redis 服务就需要密码验证，这样可以让你的 redis 服务更安全。</p>
<p>通过以下命令查看是否设置了密码验证：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; config get requirepass<br>1) <span class="hljs-string">&quot;requirepass&quot;</span><br>2) <span class="hljs-string">&quot;&quot;</span><br></code></pre></td></tr></table></figure>
<p>默认情况下 requirepass 参数是空的，这就意味着你无需通过密码验证就可以连接到 redis 服务。</p>
<p>你可以通过以下命令来修改该参数：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">127.0.0.1:6379&gt; CONFIG <span class="hljs-built_in">set</span> requirepass <span class="hljs-string">&quot;123456&quot;</span><br>OK<br>127.0.0.1:6379&gt; CONFIG get requirepass<br>1) <span class="hljs-string">&quot;requirepass&quot;</span><br>2) <span class="hljs-string">&quot;123456&quot;</span><br></code></pre></td></tr></table></figure>
<p>设置密码后，客户端连接 redis 服务就需要密码验证，否则无法执行命令。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ redis-cli <br>127.0.0.1:6379&gt; get runoob<br>(error) NOAUTH Authentication required.<br>127.0.0.1:6379&gt; auth 123456<br>OK<br>127.0.0.1:6379&gt; get runoob<br><span class="hljs-string">&quot;requirepass test&quot;</span><br></code></pre></td></tr></table></figure>

<h2 id="Redis-性能测试"><a href="#Redis-性能测试" class="headerlink" title="Redis 性能测试"></a>Redis 性能测试</h2><p>Redis 性能测试是通过同时执行多个命令实现的。</p>
<h3 id="语法-3"><a href="#语法-3" class="headerlink" title="语法"></a>语法</h3><p>redis 性能测试的基本命令如下：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">redis-benchmark [option] [option value]<br></code></pre></td></tr></table></figure>
<p><strong>注意</strong>：该命令是在 redis 的目录下执行的，而不是 redis 客户端的内部指令。</p>
<h3 id="实例-8"><a href="#实例-8" class="headerlink" title="实例"></a>实例</h3><p>以下实例同时执行 10000 个请求来检测性能：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br><span class="line">15</span><br><span class="line">16</span><br><span class="line">17</span><br><span class="line">18</span><br><span class="line">19</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ redis-benchmark -n 10000 -q<br>PING_INLINE: 77519.38 requests per second<br>PING_BULK: 69444.45 requests per second<br>SET: 79365.08 requests per second<br>GET: 81967.21 requests per second<br>INCR: 78740.16 requests per second<br>LPUSH: 86956.52 requests per second<br>RPUSH: 81300.81 requests per second<br>LPOP: 84033.61 requests per second<br>RPOP: 81967.21 requests per second<br>SADD: 88495.58 requests per second<br>HSET: 90090.09 requests per second<br>SPOP: 92592.59 requests per second<br>LPUSH (needed to benchmark LRANGE): 91743.12 requests per second<br>LRANGE_100 (first 100 elements): 91743.12 requests per second<br>LRANGE_300 (first 300 elements): 84033.61 requests per second<br>LRANGE_500 (first 450 elements): 90090.09 requests per second<br>LRANGE_600 (first 600 elements): 87719.30 requests per second<br>MSET (10 keys): 90909.09 requests per second<br></code></pre></td></tr></table></figure>
<p>redis 性能测试工具可选参数如下所示：</p>
<table>
<thead>
<tr>
<th>序号</th>
<th>选项</th>
<th>描述</th>
<th>默认值</th>
</tr>
</thead>
<tbody><tr>
<td>1</td>
<td>-h</td>
<td>指定服务器主机名</td>
<td>127.0.0.1</td>
</tr>
<tr>
<td>2</td>
<td>-p</td>
<td>指定服务器端口</td>
<td>6379</td>
</tr>
<tr>
<td>3</td>
<td>-s</td>
<td>指定服务器</td>
<td>socket</td>
</tr>
<tr>
<td>4</td>
<td>-c</td>
<td>指定并发连接数</td>
<td>50</td>
</tr>
<tr>
<td>5</td>
<td>-n</td>
<td>指定请求数</td>
<td>10000</td>
</tr>
<tr>
<td>6</td>
<td>-d</td>
<td>以字节的形式指定 SET/GET 值的数据大小</td>
<td>2</td>
</tr>
<tr>
<td>7</td>
<td>-k</td>
<td>1=keep alive 0=reconnect</td>
<td>1</td>
</tr>
<tr>
<td>8</td>
<td>-r</td>
<td>SET/GET/INCR 使用随机 key, SADD 使用随机值</td>
<td></td>
</tr>
<tr>
<td>9</td>
<td>-P</td>
<td>通过管道传输 <numreq> 请求</td>
<td>1</td>
</tr>
<tr>
<td>10</td>
<td>-q</td>
<td>强制退出 redis。仅显示 query/sec 值</td>
<td></td>
</tr>
<tr>
<td>11</td>
<td>–csv</td>
<td>以 CSV 格式输出</td>
<td></td>
</tr>
<tr>
<td>12</td>
<td>-l</td>
<td>生成循环，永久执行测试</td>
<td></td>
</tr>
<tr>
<td>13</td>
<td>-t</td>
<td>仅运行以逗号分隔的测试命令列表。</td>
<td></td>
</tr>
<tr>
<td>14</td>
<td>-I</td>
<td>Idle 模式。仅打开 N 个 idle 连接并等待。</td>
<td></td>
</tr>
</tbody></table>
<h3 id="实例-9"><a href="#实例-9" class="headerlink" title="实例"></a>实例</h3><p>以下实例我们使用了多个参数来测试 redis 性能：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ redis-benchmark -h 127.0.0.1 -p 6379 -t <span class="hljs-built_in">set</span>,lpush -n 10000 -q<br>SET: 71942.45 requests per second<br>LPUSH: 73529.41 requests per second<br></code></pre></td></tr></table></figure>
<p>以上实例中主机为 127.0.0.1，端口号为 6379，执行的命令为 set,lpush，请求数为 10000，通过 -q 参数让结果只显示每秒执行的请求数。</p>
<h2 id="Redis-客户端连接"><a href="#Redis-客户端连接" class="headerlink" title="Redis 客户端连接"></a>Redis 客户端连接</h2><p>Redis 通过监听一个 TCP 端口或者 Unix socket 的方式来接收来自客户端的连接，当一个连接建立后，Redis 内部会进行以下一些操作：</p>
<p>首先，客户端 socket 会被设置为非阻塞模式，因为 Redis 在网络事件处理上采用的是非阻塞多路复用模型。<br>然后为这个 socket 设置 TCP_NODELAY 属性，禁用 Nagle 算法<br>然后创建一个可读的文件事件用于监听这个客户端 socket 的数据发送</p>
<h3 id="最大连接数"><a href="#最大连接数" class="headerlink" title="最大连接数"></a>最大连接数</h3><p>在 Redis2.4 中，最大连接数是被直接硬编码在代码里面的，而在2.6版本中这个值变成可配置的。</p>
<p><code>maxclients</code> 的默认值是 <strong>10000</strong>，你也可以在 redis.conf 中对这个值进行修改。</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">config get maxclients<br><br>1) <span class="hljs-string">&quot;maxclients&quot;</span><br>2) <span class="hljs-string">&quot;10000&quot;</span><br></code></pre></td></tr></table></figure>
<h3 id="实例-10"><a href="#实例-10" class="headerlink" title="实例"></a>实例</h3><p>以下实例我们在服务启动时设置最大连接数为 100000：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">redis-server --maxclients 100000<br></code></pre></td></tr></table></figure>

<h2 id="Redis-管道技术"><a href="#Redis-管道技术" class="headerlink" title="Redis 管道技术"></a>Redis 管道技术</h2><p>Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。这意味着通常情况下一个请求会遵循以下步骤：</p>
<p>客户端向服务端发送一个查询请求，并监听Socket返回，通常是以阻塞模式，等待服务端响应。<br>服务端处理命令，并将结果返回给客户端。</p>
<p><strong>Redis 管道技术</strong>可以在服务端未响应时，客户端可以继续向服务端发送请求，并最终一次性读取所有服务端的响应。</p>
<h3 id="实例-11"><a href="#实例-11" class="headerlink" title="实例"></a>实例</h3><p>查看 redis 管道，只需要启动 redis 实例并输入以下命令：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br></pre></td><td class="code"><pre><code class="hljs bash">$(<span class="hljs-built_in">echo</span> -en <span class="hljs-string">&quot;PING\r\n SET runoobkey redis\r\nGET runoobkey\r\nINCR visitor\r\nINCR visitor\r\nINCR visitor\r\n&quot;</span>; sleep 10) | nc localhost 6379<br><br>+PONG<br>+OK<br><span class="hljs-variable">$5</span><br>redis<br>:1<br>:2<br>:3<br></code></pre></td></tr></table></figure>
<p>以上实例中我们通过使用 PING 命令查看redis服务是否可用， 之后我们设置了 runoobkey 的值为 redis，然后我们获取 runoobkey 的值并使得 visitor 自增 3 次。</p>
<p>在返回的结果中我们可以看到这些命令一次性向 redis 服务提交，并最终一次性读取所有服务端的响应</p>
<h3 id="管道技术的优势"><a href="#管道技术的优势" class="headerlink" title="管道技术的优势"></a>管道技术的优势</h3><p>管道技术最显著的优势是提高了 redis 服务的性能。</p>
<h2 id="Redis-分区"><a href="#Redis-分区" class="headerlink" title="Redis 分区"></a>Redis 分区</h2><p>分区是分割数据到多个Redis实例的处理过程，因此每个实例只保存key的一个子集。</p>
<h3 id="分区的优势"><a href="#分区的优势" class="headerlink" title="分区的优势"></a>分区的优势</h3><ul>
<li>通过利用多台计算机内存的和值，允许我们构造更大的数据库。</li>
<li>通过多核和多台计算机，允许我们扩展计算能力；通过多台计算机和网络适配器，允许我们扩展网络带宽。</li>
</ul>
<h3 id="分区的不足"><a href="#分区的不足" class="headerlink" title="分区的不足"></a>分区的不足</h3><p>redis的一些特性在分区方面表现的不是很好：</p>
<ul>
<li>涉及多个key的操作通常是不被支持的。举例来说，当两个set映射到不同的redis实例上时，你就不能对这两个set执行交集操作。</li>
<li>涉及多个key的redis事务不能使用。</li>
<li>当使用分区时，数据处理较为复杂，比如你需要处理多个rdb/aof文件，并且从多个实例和主机备份持久化文件。</li>
<li>增加或删除容量也比较复杂。redis集群大多数支持在运行时增加、删除节点的透明数据平衡的能力，但是类似于客户端分区、代理等其他系统则不支持这项特性。然而，一种叫做presharding的技术对此是有帮助的。</li>
</ul>
<h3 id="分区类型"><a href="#分区类型" class="headerlink" title="分区类型"></a>分区类型</h3><p>Redis 有两种类型分区。 假设有4个Redis实例 R0，R1，R2，R3，和类似user:1，user:2这样的表示用户的多个key，对既定的key有多种不同方式来选择这个key存放在哪个实例中。也就是说，有不同的系统来映射某个key到某个Redis服务。</p>
<h3 id="范围分区"><a href="#范围分区" class="headerlink" title="范围分区"></a>范围分区</h3><p>最简单的分区方式是按范围分区，就是映射一定范围的对象到特定的Redis实例。</p>
<p>比如，ID从0到10000的用户会保存到实例R0，ID从10001到 20000的用户会保存到R1，以此类推。</p>
<p>这种方式是可行的，并且在实际中使用，不足就是要有一个区间范围到实例的映射表。这个表要被管理，同时还需要各 种对象的映射表，通常对Redis来说并非是好的方法。</p>
<h3 id="哈希分区"><a href="#哈希分区" class="headerlink" title="哈希分区"></a>哈希分区</h3><p>另外一种分区方法是hash分区。这对任何key都适用，也无需是object_name:这种形式，像下面描述的一样简单：</p>
<ul>
<li>用一个hash函数将key转换为一个数字，比如使用crc32 hash函数。对key foobar执行crc32(foobar)会输出类似93024922的整数。</li>
<li>对这个整数取模，将其转化为0-3之间的数字，就可以将这个整数映射到4个Redis实例中的一个了。93024922 % 4 = 2，就是说key foobar应该被存到R2实例中。注意：取模操作是取除的余数，通常在多种编程语言中用%操作符实现。</li>
</ul>
<h2 id="PHP-使用-Redis"><a href="#PHP-使用-Redis" class="headerlink" title="PHP 使用 Redis"></a>PHP 使用 Redis</h2><h3 id="安装"><a href="#安装" class="headerlink" title="安装"></a>安装</h3><p>开始在 PHP 中使用 Redis 前， 我们需要确保已经安装了 redis 服务及 PHP redis 驱动，且你的机器上能正常使用 PHP。 接下来让我们安装 PHP redis 驱动：下载地址为:<a target="_blank" rel="noopener" href="https://github.com/phpredis/phpredis/releases"><strong>https://github.com/phpredis/phpredis/releases</strong></a>。</p>
<h3 id="PHP安装redis扩展"><a href="#PHP安装redis扩展" class="headerlink" title="PHP安装redis扩展"></a>PHP安装redis扩展</h3><p>以下操作需要在下载的 phpredis 目录中完成：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">$ wget https://github.com/phpredis/phpredis/archive/3.1.4.tar.gz<br>$ <span class="hljs-built_in">cd</span> phpredis-3.1.4                      <span class="hljs-comment"># 进入 phpredis 目录</span><br>$ /usr/<span class="hljs-built_in">local</span>/php/bin/phpize              <span class="hljs-comment"># php安装后的路径</span><br>$ ./configure --with-php-config=/usr/<span class="hljs-built_in">local</span>/php/bin/php-config<br>$ make &amp;&amp; make install<br></code></pre></td></tr></table></figure>

<h3 id="修改php-ini文件"><a href="#修改php-ini文件" class="headerlink" title="修改php.ini文件"></a>修改php.ini文件</h3><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><code class="hljs bash">vi /usr/<span class="hljs-built_in">local</span>/php/lib/php.ini<br></code></pre></td></tr></table></figure>

<p>增加如下内容:</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br></pre></td><td class="code"><pre><code class="hljs bash">extension_dir = <span class="hljs-string">&quot;/usr/local/php/lib/php/extensions/no-debug-zts-20090626&quot;</span><br><br>extension=redis.so<br></code></pre></td></tr></table></figure>

<p>安装完成后重启php-fpm 或 apache。查看phpinfo信息，就能看到redis扩展。</p>
<p><img src="https://www.runoob.com/wp-content/uploads/2014/11/14022020088882.jpg" srcset="/img/loading.gif" lazyload alt="PHP 使用 Redis"></p>
<h3 id="连接到-redis-服务"><a href="#连接到-redis-服务" class="headerlink" title="连接到 redis 服务"></a>连接到 redis 服务</h3><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br></pre></td><td class="code"><pre><code class="hljs php"><span class="hljs-meta">&lt;?php</span><br>    <span class="hljs-comment">//连接本地的 Redis 服务</span><br>   <span class="hljs-variable">$redis</span> = <span class="hljs-keyword">new</span> Redis();<br>   <span class="hljs-variable">$redis</span>-&gt;connect(<span class="hljs-string">&#x27;127.0.0.1&#x27;</span>, <span class="hljs-number">6379</span>);<br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Connection to server successfully&quot;</span>;<br>         <span class="hljs-comment">//查看服务是否运行</span><br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Server is running: &quot;</span> . <span class="hljs-variable">$redis</span>-&gt;ping();<br><span class="hljs-meta">?&gt;</span><br></code></pre></td></tr></table></figure>

<p>执行脚本，输出结果为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">Connection to server sucessfully<br>Server is running: PONG<br></code></pre></td></tr></table></figure>

<h3 id="Redis-PHP-String-字符串-实例"><a href="#Redis-PHP-String-字符串-实例" class="headerlink" title="Redis PHP String(字符串) 实例"></a>Redis PHP String(字符串) 实例</h3><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs php"><span class="hljs-meta">&lt;?php</span><br>   <span class="hljs-comment">//连接本地的 Redis 服务</span><br>   <span class="hljs-variable">$redis</span> = <span class="hljs-keyword">new</span> Redis();<br>   <span class="hljs-variable">$redis</span>-&gt;connect(<span class="hljs-string">&#x27;127.0.0.1&#x27;</span>, <span class="hljs-number">6379</span>);<br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Connection to server successfully&quot;</span>;<br>   <span class="hljs-comment">//设置 redis 字符串数据</span><br>   <span class="hljs-variable">$redis</span>-&gt;set(<span class="hljs-string">&quot;tutorial-name&quot;</span>, <span class="hljs-string">&quot;Redis tutorial&quot;</span>);<br>   <span class="hljs-comment">// 获取存储的数据并输出</span><br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Stored string in redis:: &quot;</span> . <span class="hljs-variable">$redis</span>-&gt;get(<span class="hljs-string">&quot;tutorial-name&quot;</span>);<br><span class="hljs-meta">?&gt;</span><br></code></pre></td></tr></table></figure>

<p>执行脚本，输出结果为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br></pre></td><td class="code"><pre><code class="hljs bash">Connection to server sucessfully<br>Stored string <span class="hljs-keyword">in</span> redis:: Redis tutorial<br></code></pre></td></tr></table></figure>

<hr>
<h2 id="Redis-PHP-List-列表-实例"><a href="#Redis-PHP-List-列表-实例" class="headerlink" title="Redis PHP List(列表) 实例"></a>Redis PHP List(列表) 实例</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br><span class="line">11</span><br><span class="line">12</span><br><span class="line">13</span><br><span class="line">14</span><br></pre></td><td class="code"><pre><code class="hljs php"><span class="hljs-meta">&lt;?php</span><br>   <span class="hljs-comment">//连接本地的 Redis 服务</span><br>   <span class="hljs-variable">$redis</span> = <span class="hljs-keyword">new</span> Redis();<br>   <span class="hljs-variable">$redis</span>-&gt;connect(<span class="hljs-string">&#x27;127.0.0.1&#x27;</span>, <span class="hljs-number">6379</span>);<br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Connection to server successfully&quot;</span>;<br>   <span class="hljs-comment">//存储数据到列表中</span><br>   <span class="hljs-variable">$redis</span>-&gt;lpush(<span class="hljs-string">&quot;tutorial-list&quot;</span>, <span class="hljs-string">&quot;Redis&quot;</span>);<br>   <span class="hljs-variable">$redis</span>-&gt;lpush(<span class="hljs-string">&quot;tutorial-list&quot;</span>, <span class="hljs-string">&quot;Mongodb&quot;</span>);<br>   <span class="hljs-variable">$redis</span>-&gt;lpush(<span class="hljs-string">&quot;tutorial-list&quot;</span>, <span class="hljs-string">&quot;Mysql&quot;</span>);<br>   <span class="hljs-comment">// 获取存储的数据并输出</span><br>   <span class="hljs-variable">$arList</span> = <span class="hljs-variable">$redis</span>-&gt;lrange(<span class="hljs-string">&quot;tutorial-list&quot;</span>, <span class="hljs-number">0</span> ,<span class="hljs-number">5</span>);<br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Stored string in redis&quot;</span>;<br>   print_r(<span class="hljs-variable">$arList</span>);<br><span class="hljs-meta">?&gt;</span><br></code></pre></td></tr></table></figure>

<p>执行脚本，输出结果为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br></pre></td><td class="code"><pre><code class="hljs bash">Connection to server sucessfully<br>Stored string <span class="hljs-keyword">in</span> redis<br>Mysql<br>Mongodb<br>Redis<br></code></pre></td></tr></table></figure>

<hr>
<h2 id="Redis-PHP-Keys-实例"><a href="#Redis-PHP-Keys-实例" class="headerlink" title="Redis PHP Keys 实例"></a>Redis PHP Keys 实例</h2><figure class="highlight php"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br><span class="line">5</span><br><span class="line">6</span><br><span class="line">7</span><br><span class="line">8</span><br><span class="line">9</span><br><span class="line">10</span><br></pre></td><td class="code"><pre><code class="hljs php"><span class="hljs-meta">&lt;?php</span><br>   <span class="hljs-comment">//连接本地的 Redis 服务</span><br>   <span class="hljs-variable">$redis</span> = <span class="hljs-keyword">new</span> Redis();<br>   <span class="hljs-variable">$redis</span>-&gt;connect(<span class="hljs-string">&#x27;127.0.0.1&#x27;</span>, <span class="hljs-number">6379</span>);<br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Connection to server successfully&quot;</span>;<br>   <span class="hljs-comment">// 获取数据并输出</span><br>   <span class="hljs-variable">$arList</span> = <span class="hljs-variable">$redis</span>-&gt;keys(<span class="hljs-string">&quot;*&quot;</span>);<br>   <span class="hljs-keyword">echo</span> <span class="hljs-string">&quot;Stored keys in redis:: &quot;</span>;<br>   print_r(<span class="hljs-variable">$arList</span>);<br><span class="hljs-meta">?&gt;</span><br></code></pre></td></tr></table></figure>

<p>执行脚本，输出结果为：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br><span class="line">2</span><br><span class="line">3</span><br><span class="line">4</span><br></pre></td><td class="code"><pre><code class="hljs bash">Connection to server sucessfully<br>Stored string <span class="hljs-keyword">in</span> redis::<br>tutorial-name<br>tutorial-list<br></code></pre></td></tr></table></figure>
















            </div>
            <hr>
            <div>
              <div class="post-metas mb-3">
                
                  <div class="post-meta mr-3">
                    <i class="iconfont icon-category"></i>
                    
                      <a class="hover-with-bg" href="/categories/Redis/">Redis</a>
                    
                  </div>
                
                
                  <div class="post-meta">
                    <i class="iconfont icon-tags"></i>
                    
                      <a class="hover-with-bg" href="/tags/Redis/">Redis</a>
                    
                  </div>
                
              </div>
              
                <p class="note note-warning">
                  
                    本博客所有文章除特别声明外，均采用 <a target="_blank" href="https://creativecommons.org/licenses/by-sa/4.0/deed.zh" rel="nofollow noopener noopener">CC BY-SA 4.0 协议</a> ，转载请注明出处！
                  
                </p>
              
              
                <div class="post-prevnext">
                  <article class="post-prev col-6">
                    
                    
                      <a href="/2020/05/07/LeetCode/%E6%AF%8F%E6%97%A5%E4%B8%80%E9%A2%98%E2%80%94%E2%80%94%E4%B8%A4%E6%95%B0%E4%B9%8B%E5%92%8C/">
                        <i class="iconfont icon-arrowleft"></i>
                        <span class="hidden-mobile">每日一题——两数之和</span>
                        <span class="visible-mobile">上一篇</span>
                      </a>
                    
                  </article>
                  <article class="post-next col-6">
                    
                    
                      <a href="/2020/04/03/%E9%80%9A%E8%BF%87sh%E8%84%9A%E6%9C%AC%E6%89%A7%E8%A1%8CDeployer%E4%BB%A3%E7%A0%81%E9%83%A8%E7%BD%B2/">
                        <span class="hidden-mobile">通过sh脚本执行Deployer代码部署</span>
                        <span class="visible-mobile">下一篇</span>
                        <i class="iconfont icon-arrowright"></i>
                      </a>
                    
                  </article>
                </div>
              
            </div>

            
          </article>
        </div>
      </div>
    </div>
    
      <div class="d-none d-lg-block col-lg-2 toc-container" id="toc-ctn">
        <div id="toc">
  <p class="toc-header"><i class="iconfont icon-list"></i>&nbsp;目录</p>
  <div class="toc-body" id="toc-body"></div>
</div>

      </div>
    
  </div>
</div>

<!-- Custom -->


    

    
      <a id="scroll-top-button" aria-label="TOP" href="#" role="button">
        <i class="iconfont icon-arrowup" aria-hidden="true"></i>
      </a>
    

    
      <div class="modal fade" id="modalSearch" tabindex="-1" role="dialog" aria-labelledby="ModalLabel"
     aria-hidden="true">
  <div class="modal-dialog modal-dialog-scrollable modal-lg" role="document">
    <div class="modal-content">
      <div class="modal-header text-center">
        <h4 class="modal-title w-100 font-weight-bold">搜索</h4>
        <button type="button" id="local-search-close" class="close" data-dismiss="modal" aria-label="Close">
          <span aria-hidden="true">&times;</span>
        </button>
      </div>
      <div class="modal-body mx-3">
        <div class="md-form mb-5">
          <input type="text" id="local-search-input" class="form-control validate">
          <label data-error="x" data-success="v"
                 for="local-search-input">关键词</label>
        </div>
        <div class="list-group" id="local-search-result"></div>
      </div>
    </div>
  </div>
</div>
    

    
  </main>

  <footer class="text-center mt-5 py-3">
  <div class="footer-content">
     <a href="https://hexo.io" target="_blank" rel="nofollow noopener"><span>Hexo</span></a> <i class="iconfont icon-love"></i> <a href="https://github.com/fluid-dev/hexo-theme-fluid" target="_blank" rel="nofollow noopener"><span>Fluid</span></a> 
  </div>
  

  

  
</footer>


  <!-- SCRIPTS -->
  
  <script  src="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.js" ></script>
  <link  rel="stylesheet" href="https://cdn.jsdelivr.net/npm/nprogress@0/nprogress.min.css" />

  <script>
    NProgress.configure({"showSpinner":false,"trickleSpeed":100})
    NProgress.start()
    window.addEventListener('load', function() {
      NProgress.done();
    })
  </script>


<script  src="https://cdn.jsdelivr.net/npm/jquery@3/dist/jquery.min.js" ></script>
<script  src="https://cdn.jsdelivr.net/npm/bootstrap@4/dist/js/bootstrap.min.js" ></script>
<script  src="/js/events.js" ></script>
<script  src="/js/plugins.js" ></script>

<!-- Plugins -->


  <script  src="/js/local-search.js" ></script>



  
    <script  src="/js/img-lazyload.js" ></script>
  



  



  
    <script  src="https://cdn.jsdelivr.net/npm/tocbot@4/dist/tocbot.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/@fancyapps/fancybox@3/dist/jquery.fancybox.min.js" ></script>
  
  
    <script  src="https://cdn.jsdelivr.net/npm/anchor-js@4/anchor.min.js" ></script>
  
  
    <script defer src="https://cdn.jsdelivr.net/npm/clipboard@2/dist/clipboard.min.js" ></script>
  






  <script  src="https://cdn.jsdelivr.net/npm/typed.js@2/lib/typed.min.js" ></script>
  <script>
    (function (window, document) {
      var typing = Fluid.plugins.typing;
      var title = document.getElementById('subtitle').title;
      
        typing(title);
      
    })(window, document);
  </script>















<!-- 主题的启动项 保持在最底部 -->
<script  src="/js/boot.js" ></script>


</body>
</html>
